package com.wx.controller;

// Controller接受前端数据

import com.wx.dto.AdminRegDTO;
import com.wx.dto.AdminUpdateDTO;
import com.wx.dto.BorrowAgreeDTO;
import com.wx.entity.Admin;
import com.wx.entity.Notice;
import com.wx.result.PageResult;
import com.wx.result.Result;
import com.wx.service.AdminService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.function.BinaryOperator;

//@CrossOrigin
@RestController
@RequestMapping("/admin")
@Slf4j
/* 管理员控制类 */
public class AdminController {
    @Autowired
    private AdminService adminService;

    /*
    * log.info :占位符{}用于打印管理员登录信息
    * RequestBody : 接收前端传递给后端的json字符串中的数据的
    * */
    @PostMapping("/login")
    private Result login(@RequestBody Admin admin){
        log.info("管理员登录：{}",admin);
        Admin user = adminService.login(admin);
        return Result.success(user);
    }

    /*
    * 管理员新增
    * 前端传过来的数据{
    *   "username",
    *   "password",
    *   "createUser"
    * }
    * 返回Result.sucess();
    * 请求路径：/register
    * */
    @PostMapping("/register")
    private Result register(@RequestBody AdminRegDTO adminRegDTO){
        log.info("管理员注册：{}",adminRegDTO);
        adminService.save(adminRegDTO);
        return Result.success();
    }

    /*
    * 获取管理员列表
    * 返回前端数据：管理员信息列表List
    * 请求路径：/list
    * */
    @GetMapping("/list")
    private Result getList(){
        log.info("获取管理员信息：");
        List<Admin> list = adminService.getList();
        return Result.success(list);
    }

    /*
    * 更新管理员信息
    * 前端数据{
    *   id
    *   isFrozen
    *   updateUser
    * }
    *
    * 请求方法:put
    * 请求路径:/admin/update
    * */
    @PutMapping("/update")
    private Result updateAdmin(@RequestBody AdminUpdateDTO adminUpdateDTO){
        log.info("更新管理员信息：{}", adminUpdateDTO);
        adminService.updateAdmin(adminUpdateDTO);
        return Result.success();
    }

    /*
    * 同意借书请求
    * 前端数据{
    *   Integer isAgree
    *   id
    *
    * }
    *
    * 请求方法:put
    * 请求路径:/admin/agree
    * */
    @PutMapping("/agree")
    private Result agreeBorrow(@RequestBody BorrowAgreeDTO borrowAgreeDTO){
        log.info("同意/不同意借书请求{}",borrowAgreeDTO);
        adminService.agreeBorrow(borrowAgreeDTO);
        return Result.success();
    }


    /*同意还书*/
    @PutMapping("/confirm")
    private Result confirmreturn(@RequestBody BorrowAgreeDTO borrowAgreeDTO){
        log.info("确认还书请求{}",borrowAgreeDTO);
        adminService.confirmreturn(borrowAgreeDTO);
        return Result.success();
    }

    /*管理员发送通知*/
    @PostMapping("/notice")
    private Result setnotice(@RequestBody Notice notice){
        log.info("发送通知{}",notice);
        adminService.setnotice(notice);
        return Result.success();
    }
}
